package Stream流;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.function.IntFunction;

public class 终结方法 {
    public static void main(String[] args) {
        //创建一个集合
        ArrayList<String> array=new ArrayList<>();
        Collections.addAll(array,"张无忌","周芷若","赵敏","张强","张三丰","张翠山","张良","王二麻子","谢广坤");

        //1.遍历Stream流
        array.stream().forEach(s -> System.out.println(s));

        //2.统计count
        System.out.println(array.stream().count());

        //3.收集流中的数据放到数组中
//        Object[] array1 = array.stream().filter(s -> s.startsWith("张")).toArray();
//        System.out.println(Arrays.toString(array1));

        //IntFunction的泛型:具体类型的数组
        //apply的形参value:流中数据的个数,要跟数组的长度保持一致(表示元素的个数).
        //apply的返回值:具体类型的数组
        //方法体:就是创建数组

        //toArray方法的参数类型作用:负责创建一个指定类的数组
        //toArray方法的底层:会依次得到流中的每一个数据,并且放到数组当中
        //toArray方法的返回值:是一个装着流里面所有数据的数组.
        String[] arrStr = array.stream().filter(s -> s.startsWith("张")).toArray(new IntFunction<String[]>() {
            @Override
            public String[] apply(int value) {
                return new String[value];
            }
        });
        System.out.println(Arrays.toString(arrStr));

        //Lambda表达式
        String[] array1 = array.stream().filter(s -> s.startsWith("张")).toArray(value -> new String[value]);
    }
}
